]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
Add symbolic icons to TextureCache's load_icon_name()
authorDan Winship <danw@gnome.org>
Thu, 16 Sep 2010 15:04:51 +0000 (11:04 -0400)
committerDan Winship <danw@gnome.org>
Fri, 24 Sep 2010 14:57:27 +0000 (10:57 -0400)
Icons can be loaded as St.Icon.SYMBOLIC, FULLCOLOR, APPLICATION or
DOCUMENT. The first will look for a symbolic equivalent, the second
looks for a full-color version (and does fallback, eg, from
"drive-harddisk-usb" to "drive-harddisk"). APPLICATION and DOCUMENT do
full-color icons without fallback (as specified by the icon spec).

And update various callers to use the right flags.

Based on a patch from Matt Novenstern.

https://bugzilla.gnome.org/show_bug.cgi?id=621311

js/ui/lookingGlass.js
js/ui/messageTray.js
js/ui/notificationDaemon.js
js/ui/panelMenu.js
js/ui/placeDisplay.js
js/ui/popupMenu.js
js/ui/statusMenu.js
js/ui/telepathyClient.js
src/st/st-texture-cache.c
src/st/st-texture-cache.h

index 19b8f19b27b574837e69a1fa977a8dfe59df3f54..17342998754e831f8b54e172b937447ce47c4bfc 100644 (file)
@@ -678,8 +678,9 @@ LookingGlass.prototype = {
 
         let toolbar = new St.BoxLayout({ name: 'Toolbar' });
         this.actor.add_actor(toolbar);
-        let inspectIcon = St.TextureCache.get_default().load_gicon(new Gio.ThemedIcon({ name: 'gtk-color-picker' }),
-                                                                   24);
+        let inspectIcon = St.TextureCache.get_default().load_icon_name('gtk-color-picker',
+                                                                       St.IconType.SYMBOLIC,
+                                                                       24);
         toolbar.add_actor(inspectIcon);
         inspectIcon.reactive = true;
         inspectIcon.connect('button-press-event', Lang.bind(this, function () {
index 3546fa72472c99be7b087ffebd634387418932f1..d653eabb6843ede7f386565f683546821c1896be 100644 (file)
@@ -346,7 +346,7 @@ Notification.prototype = {
 
         if (Gtk.IconTheme.get_default().has_icon(id)) {
             button.add_style_class_name('notification-icon-button');
-            button.child = St.TextureCache.get_default().load_icon_name(id, BUTTON_ICON_SIZE);
+            button.child = St.TextureCache.get_default().load_icon_name(id, St.IconType.SYMBOLIC, BUTTON_ICON_SIZE);
         } else {
             button.add_style_class_name('notification-button');
             button.label = label;
index 899de970ce9797dc74e4c8fb0f733f140ed2e505..87f07cd779c88226e7d79e8796b9a0b83ce395c3 100644 (file)
@@ -148,7 +148,7 @@ NotificationDaemon.prototype = {
                 let uri = GLib.filename_to_uri(icon, null);
                 return textureCache.load_uri_async(uri, size, size);
             } else
-                return textureCache.load_icon_name(icon, size);
+                return textureCache.load_icon_name(icon, St.IconType.FULLCOLOR, size);
         } else if (hints.icon_data) {
             let [width, height, rowStride, hasAlpha,
                  bitsPerSample, nChannels, data] = hints.icon_data;
@@ -165,7 +165,7 @@ NotificationDaemon.prototype = {
                     stockIcon = 'gtk-dialog-error';
                     break;
             }
-            return textureCache.load_icon_name(stockIcon, size);
+            return textureCache.load_icon_name(stockIcon, St.IconType.FULLCOLOR, size);
         }
     },
 
index e5fdc9809d05bf59acf1006a49e41e526952caa1..029e08e387cd60fad07e789ea3065f1bb15a0f6a 100644 (file)
@@ -61,7 +61,7 @@ SystemStatusButton.prototype = {
         this._iconName = iconName;
         if (this._iconActor)
             this._iconActor.destroy();
-        this._iconActor = St.TextureCache.get_default().load_icon_name(this._iconName, 24);
+        this._iconActor = St.TextureCache.get_default().load_icon_name(this._iconName, St.IconType.SYMBOLIC, 24);
         this.actor.set_child(this._iconActor);
     },
 
index aaae4f796da4953440b9e8e0445b9050e3bfa4e6..0e5d4fabc1b204087057a7943e774eaae2b79ec6 100644 (file)
@@ -158,7 +158,7 @@ PlacesManager.prototype = {
 
         this._connect = new PlaceInfo('special:connect', _("Connect to..."),
             function (size) {
-                return St.TextureCache.get_default().load_icon_name('applications-internet', size);
+                return St.TextureCache.get_default().load_icon_name('applications-internet', St.IconType.FULLCOLOR, size);
             },
             function () {
                 new Shell.Process({ args: ['nautilus-connect-server'] }).run();
@@ -432,7 +432,7 @@ DashPlaceDisplayItem.prototype = {
         box.add(text, { expand: true, x_fill: true });
 
         if (info.isRemovable()) {
-            let removeIcon = St.TextureCache.get_default().load_icon_name ('media-eject', PLACES_ICON_SIZE);
+            let removeIcon = St.TextureCache.get_default().load_icon_name ('media-eject', St.IconType.FULLCOLOR, PLACES_ICON_SIZE);
             let removeIconBox = new St.Clickable({ child: removeIcon,
                                                    reactive: true });
             box.add(removeIconBox);
index 64232688b24b74b00a2745451e6d39dec7a8990c..89f56e71df81ac3028b80a471aca7725a15bba22 100644 (file)
@@ -252,7 +252,7 @@ PopupImageMenuItem.prototype = {
         if (!show) {
             this._imageBin.hide();
         } else {
-            let img = St.TextureCache.get_default().load_icon_name(this._iconName, this._size);
+            let img = St.TextureCache.get_default().load_icon_name(this._iconName, St.IconType.SYMBOLIC, this._size);
             this._imageBin.set_child(img);
             this._imageBin.show();
         }
index fee4e9ff21c10234e06971a72dc705318233c40b..5eb4b38195f166f3aa39dde337d8da5fd470531a 100644 (file)
@@ -40,10 +40,10 @@ StatusMenuButton.prototype = {
         box.add(this._iconBox, { y_align: St.Align.MIDDLE, y_fill: false });
 
         let textureCache = St.TextureCache.get_default();
-        this._availableIcon = textureCache.load_icon_name('user-available', 16);
-        this._busyIcon = textureCache.load_icon_name('user-busy', 16);
-        this._invisibleIcon = textureCache.load_icon_name('user-invisible', 16);
-        this._idleIcon = textureCache.load_icon_name('user-idle', 16);
+        this._availableIcon = textureCache.load_icon_name('user-available', St.IconType.SYMBOLIC, 16);
+        this._busyIcon = textureCache.load_icon_name('user-busy', St.IconType.SYMBOLIC, 16);
+        this._invisibleIcon = textureCache.load_icon_name('user-invisible', St.IconType.SYMBOLIC, 16);
+        this._idleIcon = textureCache.load_icon_name('user-idle', St.IconType.SYMBOLIC, 16);
 
         this._presence.connect('StatusChanged', Lang.bind(this, this._updatePresenceIcon));
         this._presence.getStatus(Lang.bind(this, this._updatePresenceIcon));
index 199471a20573bd2fa9e2b0d8d4356a62738d6c6a..f5c6663b1788e5656cb7a16b2eac7f9a3aed32a5 100644 (file)
@@ -347,7 +347,7 @@ ContactManager.prototype = {
             let uri = GLib.filename_to_uri(file, null);
             iconBox.child = textureCache.load_uri_async(uri, iconBox._size, iconBox._size);
         } else {
-            iconBox.child = textureCache.load_icon_name('stock_person', iconBox._size);
+            iconBox.child = textureCache.load_icon_name('stock_person', St.IconType.FULLCOLOR, iconBox._size);
         }
     },
 
index b1a2925c2d7b5ae030ac4e8bb463aff17cdb006a..a40590e7d2df0a733bb883747333f664a2568a0d 100644 (file)
@@ -927,9 +927,16 @@ create_texture_and_ensure_request (StTextureCache        *cache,
 
 /**
  * st_texture_cache_load_gicon:
+ * @cache: The texture cache instance
+ * @icon: the #GIcon to load
+ * @size: Size of themed
+ *
+ * This method returns a new #ClutterActor for a given #GIcon. If the
+ * icon isn't loaded already, the texture will be filled
+ * asynchronously.
  *
- * This method returns a new #ClutterClone for a given #GIcon.  If the
- * icon isn't loaded already, the texture will be filled asynchronously.
+ * This will load @icon as a full-color icon; if you want a symbolic
+ * icon, you must use st_texture_cache_load_icon_name().
  *
  * Return Value: (transfer none): A new #ClutterActor for the icon
  */
@@ -1122,29 +1129,78 @@ st_texture_cache_load_sliced_image (StTextureCache    *cache,
   return group;
 }
 
+/**
+ * StIconType:
+ * @ST_ICON_SYMBOLIC: a symbolic (ie, mostly monochrome) icon
+ * @ST_ICON_FULLCOLOR: a full-color icon
+ * @ST_ICON_APPLICATION: a full-color icon, which is expected
+ *   to be an application icon
+ * @ST_ICON_DOCUMENT: a full-color icon, which is expected
+ *   to be a document (MIME type) icon
+ *
+ * Describes what style of icon is desired in a call to
+ * st_texture_cache_load_icon_name() or st_texture_cache_load_gicon().
+ * Use %ST_ICON_SYMBOLIC for symbolic icons (eg, for the panel and
+ * much of the rest of the shell chrome) or %ST_ICON_FULLCOLOR for a
+ * full-color icon.
+ *
+ * If you know that the requested icon is either an application icon
+ * or a document type icon, you should use %ST_ICON_APPLICATION or
+ * %ST_ICON_DOCUMENT, which may do a better job of selecting the
+ * correct theme icon for those types. If you are unsure what kind of
+ * icon you are loading, use %ST_ICON_FULLCOLOR.
+ */
+
 /**
  * st_texture_cache_load_icon_name:
  * @cache: The texture cache instance
  * @name: Name of a themed icon
+ * @icon_type: the type of icon to load
  * @size: Size of themed
  *
- * Load a themed icon into a texture.
+ * Load a themed icon into a texture. See the #StIconType documentation
+ * for an explanation of how @icon_type affects the returned icon.
  *
  * Return Value: (transfer none): A new #ClutterTexture for the icon
  */
 ClutterActor *
 st_texture_cache_load_icon_name (StTextureCache    *cache,
                                  const char        *name,
+                                 StIconType         icon_type,
                                  gint               size)
 {
   ClutterActor *texture;
   GIcon *themed;
+  char *symbolic;
 
-  themed = g_themed_icon_new (name);
-  texture = st_texture_cache_load_gicon (cache, themed, size);
-  g_object_unref (themed);
-
-  return CLUTTER_ACTOR (texture);
+  switch (icon_type)
+    {
+    case ST_ICON_APPLICATION:
+    case ST_ICON_DOCUMENT:
+      themed = g_themed_icon_new (name);
+      texture = st_texture_cache_load_gicon (cache, themed, size);
+      g_object_unref (themed);
+
+      return CLUTTER_ACTOR (texture);
+      break;
+    case ST_ICON_SYMBOLIC:
+      symbolic = g_strconcat (name, "-symbolic", NULL);
+      themed = g_themed_icon_new_with_default_fallbacks ((const gchar*)symbolic);
+      g_free (symbolic);
+      texture = st_texture_cache_load_gicon (cache, themed, size);
+      g_object_unref (themed);
+
+      return CLUTTER_ACTOR (texture);
+      break;
+    case ST_ICON_FULLCOLOR:
+      themed = g_themed_icon_new_with_default_fallbacks (name);
+      texture = st_texture_cache_load_gicon (cache, themed, size);
+
+      return CLUTTER_ACTOR (texture);
+      break;
+    default:
+      g_assert_not_reached ();
+    }
 }
 
 /**
index 79cf0b6dd92d3219d8762de32fe00f38967029b6..df4ef4352655678b75ae2a40fe3827663f9303d4 100644 (file)
@@ -32,6 +32,13 @@ struct _StTextureCacheClass
 
 };
 
+typedef enum {
+  ST_ICON_SYMBOLIC,
+  ST_ICON_FULLCOLOR,
+  ST_ICON_APPLICATION,
+  ST_ICON_DOCUMENT
+} StIconType;
+
 typedef enum {
   ST_TEXTURE_CACHE_POLICY_NONE,
   ST_TEXTURE_CACHE_POLICY_FOREVER
@@ -53,6 +60,7 @@ ClutterActor *st_texture_cache_bind_pixbuf_property (StTextureCache    *cache,
 
 ClutterActor *st_texture_cache_load_icon_name (StTextureCache *cache,
                                                const char     *name,
+                                               StIconType      icon_type,
                                                gint            size);
 
 ClutterActor *st_texture_cache_load_gicon (StTextureCache *cache,